#pragma once

#include <cstdlib>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include "logMessage.hpp"
#include "err.hpp"
//守护进程

void Daemon()
{
    //1 忽略异常信号
    signal(SIGPIPE,SIG_IGN);
    signal(SIGCHLD,SIG_IGN);

    //2 让自己不成为组长
    if(fork()>0) exit(0);

    //3 新建一个会话，并让自己成为这个会话的首进程
    pid_t ret = setsid();
    if((int)ret == -1)
    {
        logMessage(Error,"setsid error");
        exit(SETSID_ERR);
    }

    //4 可以更改守护进程的工作路径
    //chdir();

    //5 处理0，1，2，因为守护进程已经和设备没关系了
    int fd = open("/dev/null",O_RDWR);
    if(fd < 0)
    {
        logMessage(Error,"open error");
        exit(OPEN_ERR);
    }

    dup2(fd,0);
    dup2(fd,1);
    dup2(fd,2);
}